package com.smart4j.framework.util;

import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.util.Properties;

import lombok.extern.slf4j.Slf4j;

/**
 * 属性文件工具类
 *
 * @author 段誉
 * @create 2019-03-22 13:57
 */
@Slf4j
public final class PropsUtil {
  /**
   * 加载文件属性
   */
  public static Properties loadProps(String fileName) {
    Properties props = null;
    InputStream is = null;
    try {
      //读取配置文件
      is = Thread.currentThread().getContextClassLoader().getResourceAsStream(fileName);
      //判断如果文件找不到则抛异常
      if (is == null) {
        throw new FileNotFoundException(fileName + "file is not fount");
      }
      props = new Properties();
      props.load(is);

    } catch (IOException e) {
      log.error("load properties file failure", e);
    } finally {
      //关闭流
      if (is != null) {
        try {
          is.close();
        } catch (IOException e) {
          log.error("close input stream failure", e);
        }
      }
    }
    return props;
  }

  /**
   * 获取字符型属性（默认值为空字符串）
   */
  public static String getString(Properties props, String key) {
    return getString(props, key, "");
  }

  /**
   * 获取字符型属性（可指定默认值）
   */
  public static String getString(Properties props, String key, String defaultValue) {
    String value = defaultValue;
    if (props.containsKey(key)) {
      value = props.getProperty(key);
    }
    return value;
  }

  /**
   * 获取数值型属性（默认值为0）
   */
  public static int getInt(Properties props, String key) {
    return getInt(props, key, 0);
  }

  /**
   * 获取数值型属性（可指定默认值）
   */
  public static int getInt(Properties props, String key, int defaultValue) {
    int value = defaultValue;
    if (props.containsKey(key)) {
      value = CastUtil.castInt(props.getProperty(key));
    }
    return value;
  }

  /**
   * 获取布尔型属性（默认值为false）
   */
  public static boolean getBoolean(Properties props, String key) {
    return getBoolean(props, key, false);
  }
  /**
   * 获取布尔型属性（可指定默认值）
   */
  public static boolean getBoolean(Properties props, String key, Boolean defaultValue) {
    boolean value = defaultValue;
    if (props.containsKey(key)) {
      value = CastUtil.castBoolean(props.getProperty(key));
    }
    return value;
  }
}
